package com.CampusForum.community.dao;

import com.CampusForum.community.entity.Message;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

@Mapper
public interface MessageMapper {


    /**
     * 查询当前用户的会话列表,针对每个会话只返回一条最新的私信.
     * 根据会话分组，获取每个组中id最大的私信，也就是获取每个组最新的一个私信
     * 根据id倒序，也就是再根据时间来进行排序
     */
    List<Message> getConversations(@Param("userId") int userId,
                                   @Param("offset") int offset,
                                   @Param("limit") int limit);


    /**
     * 查询当前用户的会话数量
     */
    int getConversationCount(@Param("userId") int userId);


    /**
     * 查询某个会话所包含的私信列表
     * 排除from_id=1（from_id=1表示系统消息）
     * status != 2 排除已删除的消息
     */
    List<Message> getLetters(@Param("conversationId") String conversationId,
                             @Param("offset") int offset,
                             @Param("limit") int limit);


    /**
     * 查询某个会话所包含的私信数量
     */
    int getLetterCount(@Param("conversationId") String conversationId);


    /**
     * 查询未读私信的数量
     * status = 0 表示未读
     * 查询私信 -> 私信是给user的 -> to_id = userId
     * 发送方不是系统 from_id != 0
     * 可能根据会话来查看私信数量
     */
    int getLetterUnreadCount(@Param("userId") int userId,
                             @Param("conversationId") String conversationId);

    int insertMessage(Message message);
}
